Procedure SymLibRecords;
CONST
version='1.02';
VAR
Rd,n,i: LONGINT;
Name,Sname,Rname,Fname,Vname: STRING;
ptot,Rtot,Rn: INTEGER;
H, Hr: HANDLE;
NList: ARRAY[1..300] OF STRING;
Procedure LoadSymbols(DialItem:INTEGER);
VAR
n,i,tot: INTEGER;
SymList: DYNARRAY[] OF STRING;
Function NextSym(H:HANDLE):BOOLEAN;
BEGIN
n:=n+1;
IF (GetType(H)=16) & (NumRecords(H)>0) THEN BEGIN
tot:=tot+1;
SymList[tot]:=GetName(H);
END;
END;
BEGIN
tot:=0;
ALLOCATE SymList[1..SymDefNum];
ForEachObjectInList(NextSym,0,2,FSymDef);
IF tot>1 THEN SortArray(SymList,tot,0);
IF (DialItem >0) & (tot>0) THEN
FOR n:=Tot DownTO 1 DO InsertChoice(DialItem,0,SymList[n]);
SelChoice(5,0,TRUE);
END;
Procedure GetPIOrecords;
Procedure List(H:HANDLE);
VAR
Found: BOOLEAN;
Name: STRING;
n: INTEGER;
BEGIN
Hr:=GetRecord(H,NumRecords(H));
Name:=Getname(Hr);
n:=0;
FOR n:=1 TO ptot DO IF NOT Found & (Name=Nlist[n]) THEN Found:=TRUE;
IF NOT Found THEN BEGIN
ptot:=ptot+1;  Nlist[ptot]:=Name;END;
END;
BEGIN
ForEachObject(List,((T=PlugInObject)));
SortArray(Nlist,ptot,0);
END;
Procedure GetFieldValue(VAR i:INTEGER);
BEGIN
GetSelChoice(31,0,i,Vname);
SelChoice(21,i,TRUE);
GetSelChoice(21,0,i,Fname);
GetSelChoice(11,0,n,Rname);
SetField(13,Vname);
SetField(15,Vname);
SelField(15);
END;
Procedure UpdateRfields;
Procedure UpdateField(H:HANDLE);
BEGIN
SetRField(H,Rname,Fname,Vname);
END;
BEGIN
IF (Sname<>'')&(H<>NIL) THEN BEGIN
UpdateField(H);
IF ItemSel(40) THEN ForEachObject(UpdateField,(S=Sname));
END;
END;

Procedure ReSetFields;
VAR n:INTEGER;
BEGIN
GetSelChoice(11,0,n,Rname);
DeleteAllItems(Rd,21);
DeleteAllItems(Rd,31);
Hr:=GetObject(Rname);
FOR n:=NumFields(Hr) DOWNTO 1 DO BEGIN
InsertChoice(21,0,GetFldName(Hr,n));
InsertChoice(31,0,GetRField(H,Rname,GetFldName(Hr,n)));
END;
SelChoice(21,Rn,TRUE);
SelChoice(31,Rn,TRUE);
GetFieldValue(Rn);
END;
Procedure ResetRecords;
Var
n:INTEGER;
RecName: ARRAY [1..20] OF STRING;
BEGIN
GetSelChoice(5,0,n,Sname);
H:=GetObject(Sname);
Rtot:=NumRecords(H);
FOR n:=1 TO Rtot DO RecName[n]:=GetName(GetRecord(H,n));
IF Rtot>1 THEN SortArray(RecName,Rtot,0);
DeleteAllItems(Rd,11);
FOR n:=Rtot DOWNTO 1 DO InsertChoice(11,0,RecName[n]);
SelChoice(11,0,TRUE);
Rn:=0;
ResetFields;
GetFieldValue(Rn);
END;
Procedure Revent(VAR i,d: LONGINT);
BEGIN
CASE i of
SetupDialogC: BEGIN
Rn:=0;
LoadSymbols(5);
ResetRecords;
END;
1: BEGIN
Vname:=GetField(15);
UpdateRFields;
ResetFields;
i:=-1;
END;
5: ResetRecords;
11: ResetFields;
21: BEGIN
GetSelChoice(21,0,n,Rname);
SelChoice(31,n,TRUE);
GetFieldValue(Rn);
END;
31: GetFieldValue(Rn);
END;
END;
Procedure Rdialog;
VAR a,b: INTEGER;
BEGIN
a:=SymDefNum;
IF a<25 THEN a:=a+1 ELSE a:=25;
b:=1;
Rd:=CreateLayout(Concat('Edit Symbol Library Records    v',version),FALSE,'Change', 'Close');
CreateStaticText(Rd,4,'Library Symbols:',25);
CreateListBox(Rd,5,25,a);
CreateStaticText(Rd,10,'Records:',25);
CreateListBox(Rd,11,25,a);
CreateStaticText(RD,12,'Current Field Value:',-1);
CreateStaticText(RD,13,'  ',60);
CreateStaticText(RD,14,'Change To:',-1);
CreateEditText(Rd,15,'',60);
SetFirstLayoutItem(Rd,4);
SetBelowItem(Rd,4,5,0,0);
SetRightItem(Rd,4,10,b,0);
FOR n:=11 TO 15 DO SetBelowItem(Rd,n-1,n,0,0);
FOR n:=10 TO 15 DO AlignItemEdge(Rd,n,100,3,1);
CreateStaticText(Rd,20,'Fields:',25);
CreateListBox(Rd,21,25,a);
SetRightItem(Rd,10,20,b,0);
SetBelowItem(Rd,20,21,0,0);
CreateStaticText(Rd,30,'Values:',25);
CreateListBox(Rd,31,25,a);
SetRightItem(Rd,20,30,b,0);
SetBelowItem(Rd,30,31,0,0);
CreateCheckBox(Rd,40,'Also Update Symbols On Drawing');
SetRightItem(Rd,14,40,2,0);
n:=RunLayoutDialog(Rd,Revent);
END;
BEGIN
n:=1;
RDialog;
END;
Run(SymLibRecords);
